package br.jm.amanaje.dao;

import java.util.List;

import org.apache.cayenne.BaseContext;
import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.exp.ExpressionFactory;
import org.apache.cayenne.query.SelectQuery;
import org.apache.cayenne.query.SortOrder;

import br.jm.amanaje.model.Qualificacao;
import br.jm.amanaje.model.TipoQualificacao;

public class TipoQualificacaoDAO {

	private ObjectContext context;
	
	public TipoQualificacaoDAO() {
		this.context = BaseContext.getThreadObjectContext();
	}
	
	public TipoQualificacaoDAO(ObjectContext context) {
		this.context = context;
	}
	
	public List<TipoQualificacao> cadastrarListaPadrao() {
		List<TipoQualificacao> listaTipos = recuperarLista();
		if (listaTipos.isEmpty()) {
			for (Qualificacao qualificacao : Qualificacao.values()) {
				TipoQualificacao tipo = new TipoQualificacao();
				tipo.setCurso(qualificacao.getCurso());
				tipo.setNivel(qualificacao.getNivel());
				tipo.setSigla(qualificacao.getSigla());
				this.context.registerNewObject(tipo);
			}
			this.context.commitChanges();
		}
		return listaTipos;
	}
	
	@SuppressWarnings("unchecked")
	public List<TipoQualificacao> recuperarLista() {
		SelectQuery query = new SelectQuery(TipoQualificacao.class);
		query.addOrdering(TipoQualificacao.NIVEL_PROPERTY, SortOrder.ASCENDING);
		return this.context.performQuery(query);
	}
	
	@SuppressWarnings("unchecked")
	public TipoQualificacao recuperarPorNivel(int nivel) {
		SelectQuery query = new SelectQuery(TipoQualificacao.class,
				ExpressionFactory.matchExp(TipoQualificacao.NIVEL_PROPERTY, nivel));
		List<TipoQualificacao> listaRecuperada = this.context.performQuery(query);
		return listaRecuperada != null && (! listaRecuperada.isEmpty())  ?
				(TipoQualificacao) listaRecuperada.get(0) : null;
		
	}
}
